package com.hyfrogx.modules.app.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyfrogx.common.exception.MyException;
import com.hyfrogx.common.exception.ServiceException;
import com.hyfrogx.common.utils.QueryExt;
import com.hyfrogx.common.utils.R;
import com.hyfrogx.modules.app.entity.User;
import com.hyfrogx.modules.app.form.ClientUserForm;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author ：Li9527
 * @date ：Created in 2019-09-16 12:58
 * @description：${description}
 * @modified By：
 * @version: 1.0.0
 */
public interface UserService extends IService<User> {
  /**
   * 发送验证码
   *
   * @param mobile 手机号
   * @return R
   */
  R sendSmsCode(String mobile);

  /**
   * 发送会议邀请
   *
   * @param mobile  手机号
   * @param zoomTab 参会标记
   * @return R
   */
  R sendSmsByMeetInvite(String mobile, String zoomTab);

  /**
   * app用户注册
   *
   * @param user
   * @return Integer
   */
  void register(User user);

  /**
   * 会员分页列表
   *
   * @param query
   * @return
   */
  Page selectPageByConditions(QueryExt query);

  /**
   * 用户登录
   *
   * @param form 登录表单
   * @return 返回用户ID
   */
  User login(ClientUserForm form);


  String updateUserImg(MultipartFile file);

  /**
   * 用户增加蛙豆接口,使用场景较广泛,比如充值,收门票,后门充值等
   *
   * @param uid
   * @param bean
   * @throws ServiceException
   */
  void addBean(Long uid, int bean) throws MyException;


  /**
   * 扣除蛙豆
   *
   * @param uid
   * @param bean
   * @throws MyException
   */
  void reduce(Long uid, int bean) throws MyException;

  /**
   * 根据用户uid获得用户的余额
   *
   * @param uid
   * @return int
   * @throws MyException
   */
  int getMoneyByUid(Long uid);

  /**
   * 查询用户是否关注过资讯号
   *
   * @param uid
   * @return
   */
  Integer getIsFollowNull(Integer uid);

  /**
   * 根据号码获得用户信息
   *
   * @param phone
   * @return
   */
  User getUserByPhone(String phone);

  /**
   * 增加积分
   * @param uid
   * @param score
   */
  void addScore(Long uid, int score);

  /**
   * 根据UID,获得用户数据
   *
   * @param uid
   * @return
   */
  User getUsersById(Integer uid) throws ServiceException;

  User getUserSelfInfoByUid(Integer uid);
}
